package org.bigdata.framework.test;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
 
public class Client {
 
	// 服务器的地址和端口号
	public static final String IP_ADDR = "10.215.4.166";
	public static final int PORT = 12345;
 
	public static void main(String[] args) {
		
		//项目开始执行时间
		long start = System.currentTimeMillis();
 
		//循环100次 
		
		for (int i = 0; i < 100; i++) {
			System.out.println("客户端启动。。。。");
			System.out.println("当接受到服务器端字符为\"OK\" 的时候, 客户端将终止\n");
 
			while (true) {
				Socket socket = null;
				
				/*
				 * try { //执行的代码，其中可能有异常。一旦发现异常，则立即跳到catch执行。否则不会执行catch里面的内容 } 
				 * catch { //除非try里面执行代码发生了异常，否则这里的代码不会执行 } 
				 * finally { //不管什么情况都会执行，包括try catch 里面用了return ,可以理解为只要执行了try或者catch，就一定会执行 finally } 
				 */
				try {
 
					// 创建一个流套接字并将其连接到指定主机上的指定端口号
					socket = new Socket(IP_ADDR, PORT);
 
					// 读取服务器端数据
					DataInputStream inputStream = new DataInputStream(
							socket.getInputStream());
					// 向服务器发送数据
					DataOutputStream outputStream = new DataOutputStream(
							socket.getOutputStream());
					System.out.println("请输入：\t");
					
					//System.in 接受从控制台输入的字节
					//new InputStreamReader(System.in);构造一个InputStreamReader对象
					//构造一个字符流的缓存，里面存放在控制台输入的字节转换后成的字符。
					//readLine():读取一个文本行 ，参考：https://blog.csdn.net/sinat_31057219/article/details/78742653
					String string = new BufferedReader(new InputStreamReader(
							System.in)).readLine();
					//writeUTF()写出一个UTF-8编码的字符串前面会加上2个字节的长度标识，已标识接下来的多少个字节是属于本次方法所写入的字节数。
					outputStream.writeUTF(string);
 
					String ret = inputStream.readUTF();
					System.out.println("服务器端返回来的是：" + ret);
 
					// 如接受到 “OK” 则断开连接
					if ("ok".equals(ret)) {
						System.out.println("客户端将关闭连接");
						//线程睡眠500ms
						Thread.sleep(500);
						//结束整个循环体
						break;
					}
 
					//关闭流
					outputStream.close();
					inputStream.close();
 
				} catch (Exception e) {
					System.out.println("客户端异常：" + e.getMessage());
				} finally {
					//判断不等于null
					if (null != socket) {
						//异常处理
						try {
							socket.close();
						} catch (IOException e) {
							socket = null;
							System.out.println("客户端 finally 异常："+ e.getMessage());
						}
					}
				}
			}
		}
		
		//项目运行结束时间
		long end = System.currentTimeMillis();
		
		System.out.println("项目总体输出时间：" + (end - start) + "ms");
	}
}
